package com.test.plugin;

import java.sql.Statement;

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;

@Intercepts({
		// 完成插件签名 告诉mybatis 当前插件用来拦截哪个对象的哪个方法
		// type 拦截4大对象中的哪一个对象 args参数是什么 method：要拦截哪个方法
		@Signature(type = StatementHandler.class, args = Statement.class, method = "parameterize") })
public class MySencodePligin implements Interceptor {
	/**
	 * 拦截： 拦截目标对象的目标方法的执行
	 */
	public Object intercept(Invocation invocation) throws Throwable {
		System.out.println("这里是 MySencodePligin ====的"+invocation.getMethod()+"======"+invocation.getTarget()+"===="+invocation.getArgs());
		// 相当于放行方法
		Object proceed = invocation.proceed();
		return proceed;
	}
	/**
	 * plugin （） 方法是 实现包装目标对象的，为目标对象创建一个代理对象 return Plugin.wrap(target, this);
	 * 通过他来实现动态代理
	 */
	/**
	 * 将插件注册是的property属性设置进来 default void setProperties(Properties properties) { }
	 * <plugins> <plugin interceptor="com.test.plugin.MyFirstPligin">
	 * <property name="username" value="root"/>
	 * <property name="password" value="123456"/> </plugin> </plugins>
	 */

}
